home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Night Owl 6
/
Night Owl's Shareware - PDSI-006 - Night Owl Corp (1990).iso
/
015a
/
umbdvr.exe
/
UMB_DRVR.DOC
< prev
next >
Wrap
Text File
|
1991-09-21
|
23KB
|
522 lines
UMB_DRVR.DOC Version 5.03 09/21/91 Page 1
UMB_DRVR.SYS Device Driver
UMB provider for DOS 5.0
Copyright (C) 1991, All Rights Reserved
Christopher Blum CompuServe: 76625,1041
1022 East Wayne Avenue BIX: cblum
Wooster, Ohio 44691
IMPORTANT INFORMATION
This program carries no warranties expressed or implied. It is
solely up to the user to determine its suitability for use on his
machine.
This program is made available on a 'try before you buy' basis.
It is not crippled in any way, has no 'advertising', and future versions
will be made available via these same channels as they are developed.
Personal use license is $10.00 ( U.S. funds ) which should be
mailed to the above address if the program is used after a reasonable
trial period.
Corporate users must contact me for corporate rate or site license
arrangements.
This program is distributed as a self-extracting file containing
the device driver and its associated documentation. Copying and
redistribution is encouraged, but must be the original, unmodified
file containing this documentation, and the transfer must not carry
any fee or charge specific to this program: i.e. general BBS access
or line charges are OK, but no 'download fee' or similar charge. This
means that BBS operators may post this file for download, but
'Distribution houses' which charge for copies of disks are expressly
forbidden to distribute without prior written permission from me.
The most current version will be available on CompuServe in the
IBM forum ( 'go ibmsys' ). New versions will be uploaded as more chip
sets are supported.
The best way to contact me is via CompuServe Email ( EasyPlex )
as 76625,1041 - I monitor my mail almost every day, and I will try to
respond to requests for assistance as best I can. Do NOT leave me
messages in a forum. I do not regularly scan them, and it may never
reach me. I also monitor my Email on BIX - address it to 'cblum'.
The U.S. Postal Service is also OK ( address above ), but not as timely.
UMB_DRVR.DOC Version 5.03 09/21/91 Page 2
INTRODUCTION
UMB_DRVR.SYS is a DOS 5.0 device driver that will use the shadow
memory capability of the memory controller portion of various chip sets
to:
A) force all roms not specifically excluded to be shadowed, and
B) expand DOS base memory beyond 640KB if possible, and
C) provide UMBs ( Upper Memory Blocks ) to DOS for loading
programs and device drivers into 'high memory'
while NOT using ANY resident memory ( mapped out or otherwise ).
One advantage of this driver is that many if not all other device
drivers and TSR programs may be loaded 'high' including HIMEM.SYS and
EMM386.EXE ( even though the DOS documentation says not! ).
A second advantage of using UMB_DRVR.SYS is that device drivers
that cannot be loaded high when EMM386.EXE is providing UMBs via the
'ram' or 'noems' parameter because of their use of DMA transfers will
probably work with UMB_DRVR.SYS ( EMM386.EXE remaps ram using virtual-86
mode and the memory management logic on the 386+ chips, and the virtual
address is not the same as the real address for the ram area mapped as
UMBs, whereas UMB_DRVR.SYS uses the hardware external to the cpu and
remains in real mode, allowing DMA transfers within the UMB area ).
In addition, remaining in real mode allows programs that must be
able to use protected or virtual-86 mode themselves, such as Borland's
Turbo Debugger ( TD386.EXE / TDH386.SYS ), to operate as intended ( and
yes, TDH386.SYS can be loaded high with no problems ).
CURRENT CHIP SET SUPPORT
nn Chip set description
-- ----------------------------------------------------------------
01 Chips and Technologies CS8221/CS8281 NEAT, CS8223/CS8283 LEAP
( laptop power mamagement ) chip sets ( 286, 386SX )
02 VLSI Technology VL82C200 chip set ( 286, 386SX )
03 FOREX FRX36C300 chip set ( 386DX with cache )
04 Chips and Technologies CS8230/CS8231/CS8233 (PEAK)386/AT chip
sets ( 386DX, 386DX with cache )
05 Chips and Technologies 82C235/82C836 SCAT chips ( 286, 386SX )
-- ----------------------------------------------------------------
If your chip set is not in the preceeding list, I can include
support for it if you can supply me with the proper documentation.
Watch for future updates - I am currently working on support for
Texas Instruments TACT83000 ( 386SX/386DX/486SX/486DX ), VLSI Technology
TOPCAT ( 286/386/386SX/386DX ), a variety of INTEL chip sets for ISA and
EISA 386SX/386DX/486SX/486DX systems, and various chip sets from OPTi,
ETEQ Microsystems, and Elite Microelectronics.
UMB_DRVR.DOC Version 5.03 09/21/91 Page 3
INSTALLATION
Installation ( preferably as the first driver ) is via the line
DEVICE=UMB_DRVR.SYS /C=nn [/M=ssssssssssssssssssssssss]
in your CONFIG.SYS file. The /C= parameter is required - nn is the chip
set from the list above. The /M= parameter is optional and is used to
override defaults. It contains positional characters corresponding to
16K memory blocks at the following addresses:
/M=ssssssssssssssssssssssss
A0000'||||||||||||||||||||||`FC000---| Only '..' and '--' may be
A4000'||||||||||||||||||||`F8000----| used for the system BIOS.
A8000'||||||||||||||||||`F4000--|
Video AC000'||||||||||||||||`F0000---| '..', '--', '++', and '##'
RAM B0000'||||||||||||||`EC000 | may be used for boot page.
B4000'||||||||||||`E8000 | Use '##' to force area to be
B8000'||||||||||`E4000 | shadowed as part of BIOS.
BC000'||||||||`E0000
|||||||`DC000
||||||`D8000
|||||`D4000
||||`D0000
|||`CC000
||`C8000
|`C4000
`C0000
s = '.' Allow default use of block
'-' Force block to be unused and unshadowed
'+' Force block to be used for UMBs or
to expand DOS base memory beyond 640K
The /M= parameter must always be supplied as all 24 characters, using
the '.' character to fill any positions not forced on or off. For
example, on a VGA system using video memory from A0000 to BFFFF, if
it is in CGA 80 x 25 mode, the only video memory in use is B8000-BFFFF.
In this case, the memory from A0000-AFFFF may be used to expand DOS
base memory beyond 640K ( with some VGA cards ) by using the parameter:
/M=++++....................
Of course, with the system configured like this, if you change the video
mode, undefined ( read as disaster city! ) results will occur.
A second example would be a system where you wish to use EMM386.EXE
to supply EMS memory and wish to use C8000-D7FFF as the EMS base address
range. To accomplish this, use the parameter:
/M=..........----..........
to reserve this memory for EMM386.EXE to use. You will also need to use
the I= parameter for EMM386.EXE to include C8000-D7FFF for its use.
UMB_DRVR.DOC Version 5.03 09/21/91 Page 4
DRIVER OPERATION
The driver must be installed BEFORE HIMEM.SYS is installed. It is
an XMS 2.0 server providing UMBs to DOS via that standard. The chip
set parameter is processed and the proper routine called to remap the
unused shadow ram to DOS-useable memory. Available memory starting at
A0000 is used to expand DOS base memory beyond 640K, and other available
memory ( i.e. above the video memory ) is used for UMBs ( the areas
DOS uses for DEVICEHIGH or LOADHIGH commands ).
The driver by default will not use any areas used for video memory.
It also forces any roms including the system BIOS ( F8000-FFFFF ) to be
shadowed unless specifically excluded. If the BIOS has a 'boot page'
at F0000-F7FFF that the driver can recognize ( containing system / CMOS
setup code - AMI is one brand that has this ), that area will be mapped
as available ram since it is not needed after boot time.
The driver should be loaded as the first driver if possible. This
allows following drivers and resident programs to be loaded high - even
HIMEM.SYS and EMM386.SYS ( DOS documentation says they can't, but it
works - see note about Windows, however ). It will initialize, supply
UMBs, and go away leaving no resident memory anywhere.
Appropriate status and error messages are issued during processing
and a map of the driver's action is displayed.
SYSTEM SETUP EXAMPLE
One of my systems is a 386SX using the Chips and Technologies NEAT
chip set. It has 4MB of RAM and a Hercules Monochrome Graphics card.
I configure 2MB of EMS memory with a base address of C0000-CFFFF using
the NEAT hardware and their supplied software driver RMS386N.SYS. I load
DOS into the HMA using HIMEM.SYS, and also load Borland's Turbo Debugger
device driver TDH386.SYS for 386 virtual debugging ( TD386 ) and the
ANSI.SYS console driver. My CONFIG.SYS looks like this:
BREAK=ON
FILES=30
BUFFERS=40
STACKS=0,0
SHELL=C:\DOS\COMMAND.COM C:\DOS\ /P
DEVICE=C:\UTILITY\UMB_DRVR.SYS /C=01
DEVICEHIGH=C:\DOS\HIMEM.SYS
DEVICEHIGH=C:\BORLANDC\BIN\TDH386.SYS
DEVICEHIGH=C:\UTILITY\RMS386N.SYS
DEVICEHIGH=C:\DOS\ANSI.SYS
DOS=HIGH,UMB
This gives me 704K base memory for DOS, a maximum executable program
size of almost 690K, and 160K in one UMB at D0000-F7FFF with almost 128K
still free in that upper memory block for a mouse driver, network
driver, TSR, etc. I consider that a pretty good cure for 'RAM cram'!
UMB_DRVR.DOC Version 5.03 09/21/91 Page 5
MISCELLANEOUS NOTES
*************
* Boot page *
*************
If UMB_DRVR.SYS uses the 'boot page' area by default and your
system crashes, you need to use the /M= parameter to force it to be
considered part of the BIOS ( use '##' or '--' ). If no 'boot page' is
recognized, you may still be able to use the /M= parameter ( with '++'
for F0000-F7FFF ) to use the area ( if you are brave enough to try it ).
***************
* EMS drivers *
***************
If you run EMS, it is most efficient in terms of contiguous memory
to have your EMS base address immediately following your video ram and
any adjacent rom ( e.g. C0000-CFFFF for CGA or monochrome, C8000-D7FFF
for VGA ) or at the top of the useable area ( e.g. E8000-F7FFF with a
'boot page', E0000-EFFFF without ).
It is more efficient to use the hardware EMS driver for your chip
set if it supports it ( e.g. C & T NEAT ) or for your EMS memory card if
you have one instead of EMM386.EXE; see Introduction re Virtual-86 mode.
If you use a hardware EMS driver, you must use the /M= parameter to
force UMB_DRVR.SYS to exclude the EMS base area.
If you use EMM386.EXE, you must include the I= parameter to allow
it to use the EMS base area, and you must use the /M= parameter to force
UMB_DRVR.SYS to exclude the EMS base area. The EMS base area must be
above where EMM386.EXE is loaded ( i.e. if you load it high, the base
area must be above the UMB area ). Although you cannot specify a frame=
parameter of E800, using i=E800-F7FF will allow EMM386.EXE to set the
frame there. See notes for Windows.
********************************
* ROMs that cannot be shadowed *
********************************
Some roms cannot be shadowed by normal means because they have some
ram they must use mapped in their address space ( e.g. some RLL, ESDI
and SCSI disk controller roms ) and shadowing is normally done using
protected ram. These roms usually will work when shadowed by this driver
if they are within a protection block also containing UMBs. Try letting
UMB_DRVR.SYS shadow the rom and see if it works.
If you find you have a rom that cannot be shadowed, or for some
reason you do not wish to shadow a rom, you must use the /M= parameter
to exclude it from UMB_DRVR.SYS control. Refer to the chip-set-specific
notes for any special considerations.
UMB_DRVR.DOC Version 5.03 09/21/91 Page 6
MISCELLANEOUS NOTES
***********
* Windows *
***********
Windows 3.0 has been tested as follows:
386 enhanced mode:
Windows will NOT run in 386 enhanced mode with UMB_DRVR.SYS in the
system. Use EMM386.EXE to provide UMBs if you want to run this way.
Standard mode:
Windows will run in standard mode with UMB_DRVR.SYS installed and
HIMEM.SYS and an EMS driver ( hardware or EMM386.EXE ) loaded high or
low. Note you must have some extended memory to run standard mode - i.e.
do not have EMM386.EXE remap ALL extended memory to expanded.
Real mode:
Windows runs in real mode with UMB_DRVR.SYS installed, HIMEM.SYS
loaded high, and EMM386.EXE loaded LOW, giving 'large frame EMS'. You
can have EMM386.EXE remap everything to expanded in this configuration.
**************************************************************
* User Program access to Upper Memory with DOS managing UMBs *
**************************************************************
1. Record current status of memory system so you can restore it.
int 21H/ax=5800h - returns al=strategy ( see below )
int 21h/ax=5802h - returns al=UMB link state ( see below )
2. Set up for memory allocation / deallocation.
int 21h/ax=5801h/bh=0/bl=strategy int 21h/ax=5803h/bh=0/bl=UMB status
00h - first fit, low memory 00h = remove UMBs from mem chain
01h - best " " " 01h = add UMBs to mem chain
02h - last " " " ( UMBs must be chained for access )
40h - first fit, high memory
41h - best " " "
42h - last " " "
80h - first fit, try high then low memory
81h - best " " " " " "
82h - last " " " " " "
3. Do normal int 21h/ah=48h, int 21h/ah=49h, int 21h/ah=4Ah as desired.
4. Restore values saved in step 1 above.
The system defaults to first-fit-low with UMBs not chained. If you
chain the UMBs, strategies 00/01/02 affect the entire chain. For example
with the UMBs chained and strategy 00, you will get memory from the UMB
area if the request cannot be satisfied from low memory.
UMB_DRVR.DOC Version 5.03 09/21/91 Page 7
CHIP-SET-SPECIFIC NOTES
***************************************************************
* Chips & Technologies CS8221/CS8281 NEAT, CS8223/CS8283 LEAP *
***************************************************************
These chip sets allows the 384k of motherboard ram at A0000-FFFFF
to remap to extended memory at 100000-15FFFF on systems with only 1mb of
ram. If you have only 1mb of ram on your system, you must make sure that
this remapping is turned off for UMB_DRVR.SYS to work. See your system
documentation / CMOS setup.
These chip sets maps in 16k segments, but write protection for the
area C0000-FFFFF is in 64k segments. To allow maximum memory utilization
the driver marks any segment containing UMBs as read/write. If the 64k
segment also contains a rom shadow, it is not protected.
Although it should not be necessary, if you wish to have a rom be
shadowed and protected, exclude any non-rom areas within the 64k segment
( e.g. for a VGA rom at C0000-C7FFF, exclude C8000-CFFFF ).
If you must force a rom to be unshadowed, you need only exclude the
16k segment(s) it occupies ( e.g. for a disk rom at C8000-CBFFF, exclude
C8000-CBFFF ).
UMB_DRVR.SYS will recognize the EMS setup for these chip sets and
will by default exclude the EMS base segment if the EMS hardware is
enabled. Use of the /M= parameter is not required in this case.
The driver requires no special setup for these chip sets.
*************************************
* VLSI Technology VL82C200 chip set *
*************************************
This chip set uses a jumper or switch to enable shadow ram ability.
This does not actually cause shadowing, but must be in proper position
for UMB_DRVR.SYS to work. Check your system documentation.
This chip set maps and protects in 64k segments. To allow maximum
memory utilization, 64k segments containing UMBs are set to read/write.
If the 64k segment also contains a rom shadow, it is not protected.
Although it should not be necessary, if you wish to have a rom be
shadowed and protected, exclude any non-rom areas within the 64k segment
( e.g. for a VGA rom at C0000-C7FFF, exclude C8000-CFFFF ).
If you must force a rom to be unshadowed, exclude the entire 64k
segment on a 64k boundary ( e.g. for a disk rom at C8000-CBFFF, exclude
C0000-CFFFF ).
The driver requires no special setup for this chip set.
UMB_DRVR.DOC Version 5.03 09/21/91 Page 8
CHIP-SET-SPECIFIC NOTES
****************************
* FOREX FRX36C300 chip set *
****************************
This chip set maps in 32k segments from C0000 to EFFFF, and one 64k
segment for the system BIOS ( F0000-FFFFF ). Ram at A0000-BFFFF is
always remapped to the highest area and cannot be used by the driver.
Protection is set globally, meaning that all used ram ( shadow or UMBs )
is marked read/write.
The chip set also remaps D0000-EFFFF to the highest area if there
is nothing shadowed in that area. When UMB_DRVR.SYS enables this area,
the remapping is removed and the size of your extended memory is reduced
by 128k. A small INT 15H stub is installed in the BIOS stack area at
30H:80H to handle situations where your extended memory size changes. If
you shadow something in the area D0000-EFFFF in your CMOS setup ( even
though you may have no rom there ), then this stub is not required and
not installed.
If you must force a rom to be unshadowed, exclude the entire 32k
segment on a 32k boundary ( e.g. for a disk rom at C8000-CBFFF, exclude
C8000-CFFFF ).
The driver requires no special setup for this chip set.
**********************************************************
* Chips & Technologies CS8230/CS8231/CS8233 (PEAK)386/AT *
**********************************************************
These chip sets maps in 16k segments, but write protection for the
area C0000-FFFFF is in 64k segments. To allow maximum memory utilization
the driver marks any segment containing UMBs as read/write. If the 64k
segment also contains a rom shadow, it is not protected.
Although it should not be necessary, if you wish to have a rom be
shadowed and protected, exclude any non-rom areas within the 64k segment
( e.g. for a VGA rom at C0000-C7FFF, exclude C8000-CFFFF ).
If you must force a rom to be unshadowed, you need only exclude the
16k segment(s) it occupies ( e.g. for a disk rom at C8000-CBFFF, exclude
C8000-CBFFF ).
The driver requires no special setup for these chip sets.
UMB_DRVR.DOC Version 5.03 09/21/91 Page 9
CHIP-SET-SPECIFIC NOTES
*************************************************
* Chips & Technologies 82C235/82C836 SCAT chips *
*************************************************
These chips map in 16k segments, but write protection for the area
C0000-FFFFF is in 32k segments. To allow maximum memory utilization the
driver marks any segment containing UMBs as read/write. If the 32k
segment also contains a rom shadow, it is not protected.
Although it should not be necessary, if you wish to have a rom be
shadowed and protected, exclude any non-rom areas within the 32k segment
( e.g. for a rom at C8000-CBFFF, exclude CC000-CFFFF ).
If you must force a rom to be unshadowed, you need only exclude the
16k segment(s) it occupies ( e.g. for a disk rom at C8000-CBFFF, exclude
C8000-CBFFF ).
The driver requires no special setup for these chips.
UMB_DRVR.DOC Version 5.03 09/21/91 Page 10
ERROR MESSAGES
***************************
* Shadow ram test failure *
***************************
This message is issued when the shadow ram read/write test fails.
It is usually an indication that you do not have your system configured
properly for UMB_DRVR.SYS, or you are forcing use of unavailable memory.
Check your CMOS setup and any jumpers or switches per your system
documentation. Also review the chip-set-specific notes earlier in this
document for any requirements.
This can also occur if you are trying the example listed earlier
about using a portion of the video ram on a VGA system in CGA mode and
your VGA hardware will not allow it.
******************************
* Chip not found / bad setup *
******************************
As much as possible, UMB_DRVR.SYS tries to verify that you have the
chip you indicated in the /C= parameter and that it is set up properly.
Refer to the chip-set-specific notes and correct your CMOS system setup.
If you are sure you have the chip set, have specified it correctly,
and have it set up properly, contact me via Email or postal service and
I will try to straighten things out.
*************************
* XMS already installed *
*************************
You have not installed UMB_DRVR.SYS before HIMEM.SYS in your
CONFIG.SYS file. Correct the order of the DEVICE= statements in your
CONFIG.SYS file and and reboot.
*************************
* Incorrect DOS version *
*************************
UMB_DRVR.SYS requires DOS 5.0 for proper operation.
************************
* Invalid parameter(s) *
************************
On the DEVICE= statement for UMB_DRVR.SYS you have either:
A) omitted or incorrectly specified the /C= parameter, or
B) specified the /M= parameter incorrectly.
Check that you have entered the proper 2-digit number for your chip set
and that ( if specified ) the /M= parameter contains 24 valid characters
from the set '.' ( period ), '-' ( minus ), '+' ( plus ) and '#' ( pound
sign ). Correct the DEVICE= statement in CONFIG.SYS and reboot.
UMB_DRVR.DOC Version 5.03 09/21/91 Page 11
REVISION HISTORY
5.03 [09/21/91] - Added Chips & Technologies CS8230/CS8231/CS8233
(PEAK)386/AT, 82C235/82C836 SCAT chip sets,
removed as many setup requirements as possible.
5.02 [09/12/91] - Fix for VLSI technology VL82C200, default all
roms shadowed, added support for use of 'boot
page' area, added FOREX FRX32C300 chip set
5.01 [09/04/91] - Added VLSI Technology VL82C200 chip set
5.00 [09/01/91] - Original release version, Chips & Technologies
CS8221/CS8281 NEAT, CS8223/CS8283 LEAP chip sets
***** END OF DOCUMENTATION *****